﻿Public Class Login
    Dim users As New Users
    Dim LoginService As New LoginService
    Dim databasefuncs As New DatabaseFuncs
    Dim userResettingPassword = False
    Dim userVerifyingDBaccess = False
    Dim loginAttempts As Integer = 0

    Private Function dologin()
        If userVerifyingDBaccess = True Then
            Dim filePath As String
            filePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\ICTA4YOU\ServiceDeskDB.conf"
            Dim sr As System.IO.StreamReader = New System.IO.StreamReader(filePath)
            Dim usrname As String = sr.ReadLine()
            Dim passwd As String = sr.ReadLine()
            sr.Close()

            Dim str = LoginService.checkConnectionString(DBusernameTextBox.Text, DBpasswordTextBox.Text)
            If str = "False" Then
                userVerifyingDBaccess = True
                Label1.Text = "Fout: Vul het toegangswachtwoord in."
                loginAttempts = loginAttempts + 1
                If loginAttempts > 4 Then
                    Me.Hide() 'Hiden, het lijkt alsof het programma is afgesloten maar als de gebruiker probeert het programma nog een keer op te starten lukt dat niet.
                    banTimer.Start()
                    MsgBox("Er zijn teveel foute inlogpogingen geregistreerd. Het programma kan de komende 5 minuten niet worden gebruikt.")
                End If
            Else
                'string is OK
                Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(filePath)
                sw.Flush() '??
                sw.WriteLine(LoginService.blowFish(DBusernameTextBox.Text))
                sw.WriteLine(LoginService.blowFish(DBpasswordTextBox.Text))
                sw.Close()
                userVerifyingDBaccess = False
                Me.Size = New Point(323, 95)
                gebruikersnaamTB.Enabled = True
                wachtwoordTB.Enabled = True
                wachtwoordTB.Enabled = True

                gebruikersnaamTB.TabStop = True
                wachtwoordTB.TabStop = True
                DBusernameTextBox.TabStop = False
                DBpasswordTextBox.TabStop = False

                If Not databasefuncs.setup() = "True" Then
                    gebruikersnaamTB.Enabled = False
                    wachtwoordTB.Enabled = False

                End If
            End If

            Return False
        End If

        If gebruikersnaamTB.Text = "" Or wachtwoordTB.Text = "" Then
            waarschuwingLabel.Text = "De combinatie van het wachtwoord" + vbNewLine + "en gebruikersnaam klopt niet!"
            loginAttempts = loginAttempts + 1
            If loginAttempts > 4 Then
                Me.Hide() 'Hiden, het lijkt alsof het programma is afgesloten maar als de gebruiker probeert het programma nog een keer op te starten lukt dat niet.
                banTimer.Start()
                MsgBox("Er zijn teveel foute inlogpogingen geregistreerd. Het programma kan de komende 5 minuten niet worden gebruikt.")
            End If
            Return False
        End If

        If userResettingPassword And users.ovnummer = gebruikersnaamTB.Text Then 'The user is resetting his password
            If nieuwWachtwoordTB.Text = nieuwWachtwoordHerhaalTB.Text And (Not nieuwWachtwoordTB.Text = "") Then
                users.encrypted_password = LoginService.MD5(nieuwWachtwoordHerhaalTB.Text)
                users.resetpassword = 0
                users.SaveToDB(users._uId, False)
                userResettingPassword = False
                wachtwoordTB.Text = nieuwWachtwoordHerhaalTB.Text
                dologin()
            End If
        End If

        waarschuwingLabel.Visible = False
        DBpasswordGroupbox.Visible = False
        WachtwoordGroupbox.Visible = False
        Dim resultaat As String = users.LogIn(gebruikersnaamTB.Text, wachtwoordTB.Text)
        If resultaat = "True" Then 'user logged in successfully
            If (users.resetpassword = 1) Then
                DBpasswordGroupbox.Visible = False
                WachtwoordGroupbox.Visible = True
                If waarschuwingLabel.Visible = False Then
                    WachtwoordGroupbox.Location = New Point(-5, 73)
                    Me.Size = New Point(323, 193)
                Else
                    WachtwoordGroupbox.Location = New Point(-5, 115)
                    Me.Size = New Point(323, 235)
                End If
                userResettingPassword = True
                Return "reset"
            Else
                Me.Size = New Point(323, 95)
            End If
            AdminmenuV2.Show()
            My.Settings.localuserid = users.uId
            My.Settings.localusername = users.name
            My.Settings.localuserlevel = users.level
            My.Settings.localuserovnummer = users.ovnummer
            Me.Close()
        ElseIf (users.LogIn(gebruikersnaamTB.Text, wachtwoordTB.Text) = "Nietcorrect") Then
            waarschuwingLabel.Text = "De combinatie van het wachtwoord" + vbNewLine + "en gebruikersnaam klopt niet!"
            waarschuwingLabel.Visible = True
            Me.Size = New Point(323, 139)
        ElseIf (users.LogIn(gebruikersnaamTB.Text, wachtwoordTB.Text) = "Geenrechten") Then
            waarschuwingLabel.Text = "Je hebt niet genoeg rechten om" + vbNewLine + "in het admin-gedeelte in te loggen!"
            waarschuwingLabel.Visible = True
            Me.Size = New Point(323, 139)
        ElseIf (users.LogIn(gebruikersnaamTB.Text, wachtwoordTB.Text) = "Geblokkeerd") Then
            waarschuwingLabel.Text = "Dit account is uitgeschakeld."
            waarschuwingLabel.Visible = True
            Me.Size = New Point(323, 139)
        Else
            MsgBox("Er is een fout opgetreden: " + vbNewLine + resultaat)
            waarschuwingLabel.Visible = False
        End If

        Return "true"
    End Function

    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Inloggen_PB.Click
        dologin()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        dologin()
    End Sub

    Private Sub Inloggen_PB_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Inloggen_PB.MouseDown
        sender.image = My.Resources.Login_no_circle_Click
    End Sub
    Private Sub Inloggen_PB_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Inloggen_PB.MouseUp
        sender.image = My.Resources.Login_no_circle
    End Sub

    Private Sub Login_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'controleren of er meerdere instanties van dit programma draaien:
        If PrevInstance() Then
            MsgBox("Het programma is al gestart of er zijn teveel foute inlogpogingen geregistreerd.")
            Me.Close()
        End If

        Dim filePath As String
        filePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\ICTA4YOU"
        If Not My.Computer.FileSystem.DirectoryExists(filePath) Then
            MkDir(filePath)
        End If

        If My.Computer.FileSystem.DirectoryExists("C:\Program Files\MySQL\MySQL Connector Net 6.5.4\") Or My.Computer.FileSystem.DirectoryExists("C:\Program Files (x86)\MySQL\MySQL Connector Net 6.5.4\") Then

        Else
            If (downloadMysql(filePath & "\mysql.msi") = False) Then
                Me.Close()
            Else
                Process.Start(filePath & "\mysql.msi")
                Me.Close()
            End If
            Exit Sub
        End If
        If Not (My.Computer.FileSystem.DirectoryExists(filePath) And My.Computer.FileSystem.FileExists(filePath + "\ServiceDeskDB.conf")) Then
            'database config file does not exist.
            Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(filePath + "\ServiceDeskDB.conf")
            sw.WriteLine("null")
            sw.WriteLine("null")
            sw.Close()
            DBpasswordGroupbox.Visible = True
            userVerifyingDBaccess = True
            gebruikersnaamTB.Enabled = False
            gebruikersnaamTB.TabStop = False
            wachtwoordTB.Enabled = False
            wachtwoordTB.TabStop = False
            DBusernameTextBox.TabStop = True
            DBpasswordTextBox.TabStop = True

            If waarschuwingLabel.Visible = False Then
                DBpasswordGroupbox.Location = New Point(-5, 73)
                Me.Size = New Point(323, 193)
            Else
                DBpasswordGroupbox.Location = New Point(-5, 115)
                Me.Size = New Point(323, 235)
            End If
            DBpasswordGroupbox.Show()
        Else
            'check existing connectionstring
            Dim sr As System.IO.StreamReader = New System.IO.StreamReader(filePath + "\ServiceDeskDB.conf")
            Dim usrname As String = sr.ReadLine()
            Dim passwd As String = sr.ReadLine()
            sr.Close()

            Dim str = LoginService.checkConnectionString(usrname, passwd, True)
            If str = "False" Then
                DBpasswordGroupbox.Visible = True
                userVerifyingDBaccess = True
                gebruikersnaamTB.Enabled = False
                wachtwoordTB.Enabled = False
                wachtwoordTB.Enabled = False
                wachtwoordTB.TabStop = False
                DBusernameTextBox.TabStop = True
                DBpasswordTextBox.TabStop = True

                If waarschuwingLabel.Visible = False Then
                    DBpasswordGroupbox.Location = New Point(-5, 73)
                    Me.Size = New Point(323, 193)
                Else
                    DBpasswordGroupbox.Location = New Point(-5, 115)
                    Me.Size = New Point(323, 235)
                End If
                DBpasswordGroupbox.Show()
            Else
                'string is OK
                If Not databasefuncs.setup() = "True" Then
                    gebruikersnaamTB.Enabled = False
                    wachtwoordTB.Enabled = False
                    'something went wrong..
                End If
            End If
        End If
    End Sub


    Public Function downloadMysql(ByVal path As String)
        Try
            My.Computer.Network.DownloadFile("http://www.marnixict.nl/downloads/mysql-connector-net-6.5.4.msi", path)
            MsgBox("Een component om verbinding te maken met de database mist nog op deze computer. Het bestand wordt gedownload en geïnstalleerd. Start daarna dit programma weer op!")
        Catch ex As Exception
            Return False
        End Try
        Return True
    End Function

    Public Shared Function PrevInstance() As Boolean
        If Ubound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
            Return True
        Else
            Return False
        End If
    End Function

    Private Sub banTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles banTimer.Tick
        Application.Exit()
    End Sub
End Class
